diff options
author | Mike Buland <eichlan@xagasoft.com> | 2012-01-18 23:58:30 -0700 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2012-01-18 23:58:30 -0700 |
commit | 3232d0069421a1585e7e42f503c1ed7b1910891c (patch) | |
tree | 0d2c5ed5e24a9ffeb3c1b3c08528971a8a3d587e | |
parent | 0bdd1441fc95f70f2f86c89c20eb866a9ca2787b (diff) | |
download | stage-3232d0069421a1585e7e42f503c1ed7b1910891c.tar.gz stage-3232d0069421a1585e7e42f503c1ed7b1910891c.tar.bz2 stage-3232d0069421a1585e7e42f503c1ed7b1910891c.tar.xz stage-3232d0069421a1585e7e42f503c1ed7b1910891c.zip |
Added functions join, string, and keys.
-rw-r--r-- | demo.stage | 28 | ||||
-rw-r--r-- | src/functionjoin.cpp | 36 | ||||
-rw-r--r-- | src/functionjoin.h | 16 | ||||
-rw-r--r-- | src/functionkeys.cpp | 32 | ||||
-rw-r--r-- | src/functionkeys.h | 16 | ||||
-rw-r--r-- | src/functionstring.cpp | 17 | ||||
-rw-r--r-- | src/functionstring.h | 16 | ||||
-rw-r--r-- | src/game.cpp | 6 |
8 files changed, 146 insertions, 21 deletions
@@ -31,21 +31,10 @@ global | |||
31 | { | 31 | { |
32 | if exists(situation.exits) then | 32 | if exists(situation.exits) then |
33 | { | 33 | { |
34 | out = "Obvious exits are: "; | 34 | display( "Obvious exits are: " + join( |
35 | bFirst = true; | 35 | keys( situation.exits ), |
36 | for each dir : dest in situation.exits do | 36 | ", " |
37 | { | 37 | ) ); |
38 | if bFirst then | ||
39 | { | ||
40 | bFirst = false; | ||
41 | } | ||
42 | else | ||
43 | { | ||
44 | out += ", "; | ||
45 | } | ||
46 | out += dir; | ||
47 | } | ||
48 | display( out ); | ||
49 | } | 38 | } |
50 | else | 39 | else |
51 | { | 40 | { |
@@ -77,17 +66,13 @@ global | |||
77 | */ | 66 | */ |
78 | command: "inventory" | 67 | command: "inventory" |
79 | { | 68 | { |
80 | out = 'You are carrying: '; | 69 | out = 'You are carrying: ' + join( player.inventory, ", " ); |
81 | for each item in player.inventory do | ||
82 | { | ||
83 | out += " " + item; | ||
84 | } | ||
85 | display( out ); | 70 | display( out ); |
86 | } | 71 | } |
87 | 72 | ||
88 | // You should always have a global exit, quit, escape, something for | 73 | // You should always have a global exit, quit, escape, something for |
89 | // dev-testing at least. | 74 | // dev-testing at least. |
90 | command: "exit" | 75 | command: "quit" |
91 | { | 76 | { |
92 | exit(); | 77 | exit(); |
93 | } | 78 | } |
@@ -147,6 +132,7 @@ situation <<beachCenter>> | |||
147 | 'east': <<beachEast>>, | 132 | 'east': <<beachEast>>, |
148 | 'west': <<beachWest>> | 133 | 'west': <<beachWest>> |
149 | }; | 134 | }; |
135 | situation.items = ['stick']; | ||
150 | } | 136 | } |
151 | enter | 137 | enter |
152 | { | 138 | { |
diff --git a/src/functionjoin.cpp b/src/functionjoin.cpp new file mode 100644 index 0000000..71ee879 --- /dev/null +++ b/src/functionjoin.cpp | |||
@@ -0,0 +1,36 @@ | |||
1 | #include "functionjoin.h" | ||
2 | |||
3 | #include "gamestate.h" | ||
4 | |||
5 | #include <bu/sio.h> | ||
6 | using namespace Bu; | ||
7 | |||
8 | FunctionJoin::FunctionJoin() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | FunctionJoin::~FunctionJoin() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | void FunctionJoin::call( class GameState &gState ) | ||
17 | { | ||
18 | Variable vSep = gState.popDeref().to( Variable::tString ); | ||
19 | Variable vLst = gState.popDeref(); | ||
20 | |||
21 | if( vLst.getType() != Variable::tList ) | ||
22 | throw Bu::ExceptionBase("First parameter of join must be a list."); | ||
23 | |||
24 | Bu::String sOut; | ||
25 | for( Variable::VariableArray::const_iterator i = vLst.getList().begin(); | ||
26 | i; i++ ) | ||
27 | { | ||
28 | if( i != vLst.getList().begin() ) | ||
29 | sOut += vSep.getString(); | ||
30 | sOut += (*i).to( Variable::tString ).getString(); | ||
31 | } | ||
32 | |||
33 | |||
34 | gState.push( sOut ); | ||
35 | } | ||
36 | |||
diff --git a/src/functionjoin.h b/src/functionjoin.h new file mode 100644 index 0000000..7c46e7f --- /dev/null +++ b/src/functionjoin.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef FUNCTION_JOIN_H | ||
2 | #define FUNCTION_JOIN_H | ||
3 | |||
4 | #include "function.h" | ||
5 | |||
6 | class FunctionJoin : public Function | ||
7 | { | ||
8 | public: | ||
9 | FunctionJoin(); | ||
10 | virtual ~FunctionJoin(); | ||
11 | |||
12 | virtual Bu::String getName() const { return "join"; } | ||
13 | virtual void call( class GameState &gState ); | ||
14 | }; | ||
15 | |||
16 | #endif | ||
diff --git a/src/functionkeys.cpp b/src/functionkeys.cpp new file mode 100644 index 0000000..12c1098 --- /dev/null +++ b/src/functionkeys.cpp | |||
@@ -0,0 +1,32 @@ | |||
1 | #include "functionkeys.h" | ||
2 | |||
3 | #include "gamestate.h" | ||
4 | |||
5 | #include <bu/sio.h> | ||
6 | using namespace Bu; | ||
7 | |||
8 | FunctionKeys::FunctionKeys() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | FunctionKeys::~FunctionKeys() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | void FunctionKeys::call( class GameState &gState ) | ||
17 | { | ||
18 | Variable vDict = gState.popDeref(); | ||
19 | |||
20 | if( vDict.getType() != Variable::tDictionary ) | ||
21 | throw Bu::ExceptionBase("Parameter to keys must be a dictionary."); | ||
22 | |||
23 | Variable vLst( Variable::tList ); | ||
24 | for( Variable::VariableHash::const_iterator i = vDict.getHash().begin(); | ||
25 | i; i++ ) | ||
26 | { | ||
27 | vLst += i.getKey(); | ||
28 | } | ||
29 | |||
30 | gState.push( vLst ); | ||
31 | } | ||
32 | |||
diff --git a/src/functionkeys.h b/src/functionkeys.h new file mode 100644 index 0000000..ccc3bdd --- /dev/null +++ b/src/functionkeys.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef FUNCTION_KEYS_H | ||
2 | #define FUNCTION_KEYS_H | ||
3 | |||
4 | #include "function.h" | ||
5 | |||
6 | class FunctionKeys : public Function | ||
7 | { | ||
8 | public: | ||
9 | FunctionKeys(); | ||
10 | virtual ~FunctionKeys(); | ||
11 | |||
12 | virtual Bu::String getName() const { return "keys"; } | ||
13 | virtual void call( class GameState &gState ); | ||
14 | }; | ||
15 | |||
16 | #endif | ||
diff --git a/src/functionstring.cpp b/src/functionstring.cpp new file mode 100644 index 0000000..ca5a3aa --- /dev/null +++ b/src/functionstring.cpp | |||
@@ -0,0 +1,17 @@ | |||
1 | #include "functionstring.h" | ||
2 | |||
3 | #include "gamestate.h" | ||
4 | |||
5 | FunctionString::FunctionString() | ||
6 | { | ||
7 | } | ||
8 | |||
9 | FunctionString::~FunctionString() | ||
10 | { | ||
11 | } | ||
12 | |||
13 | void FunctionString::call( class GameState &gState ) | ||
14 | { | ||
15 | gState.push( gState.popDeref().to( Variable::tString ) ); | ||
16 | } | ||
17 | |||
diff --git a/src/functionstring.h b/src/functionstring.h new file mode 100644 index 0000000..36e4f51 --- /dev/null +++ b/src/functionstring.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef FUNCTION_STRING_H | ||
2 | #define FUNCTION_STRING_H | ||
3 | |||
4 | #include "function.h" | ||
5 | |||
6 | class FunctionString : public Function | ||
7 | { | ||
8 | public: | ||
9 | FunctionString(); | ||
10 | virtual ~FunctionString(); | ||
11 | |||
12 | virtual Bu::String getName() const { return "string"; } | ||
13 | virtual void call( class GameState &gState ); | ||
14 | }; | ||
15 | |||
16 | #endif | ||
diff --git a/src/game.cpp b/src/game.cpp index 4971c4b..37989bd 100644 --- a/src/game.cpp +++ b/src/game.cpp | |||
@@ -8,6 +8,9 @@ | |||
8 | #include "functioninteger.h" | 8 | #include "functioninteger.h" |
9 | #include "functionfloat.h" | 9 | #include "functionfloat.h" |
10 | #include "functiondebugstring.h" | 10 | #include "functiondebugstring.h" |
11 | #include "functionstring.h" | ||
12 | #include "functionjoin.h" | ||
13 | #include "functionkeys.h" | ||
11 | 14 | ||
12 | Game::Game() | 15 | Game::Game() |
13 | { | 16 | { |
@@ -20,6 +23,9 @@ Game::Game() | |||
20 | addFunction( new FunctionInteger() ); | 23 | addFunction( new FunctionInteger() ); |
21 | addFunction( new FunctionFloat() ); | 24 | addFunction( new FunctionFloat() ); |
22 | addFunction( new FunctionDebugString() ); | 25 | addFunction( new FunctionDebugString() ); |
26 | addFunction( new FunctionString() ); | ||
27 | addFunction( new FunctionJoin() ); | ||
28 | addFunction( new FunctionKeys() ); | ||
23 | } | 29 | } |
24 | 30 | ||
25 | Game::~Game() | 31 | Game::~Game() |